本系列文之後也會置於個人網站
接著來看看爲什麼更新帳號資訊,在「快速開始」會有那些變化。
這與client scope和claim有關。關於後者之後會在詳細說說,而目前就先了解一下這個現象發生的原因。
首先,在我們取得token
的時候曾申明需要的scope
爲openid profile email
。其中profile
這個scope爲這次變化的主要原因。
來到Keycloak管理選單下的 Client Scopes ,然後找到 profile 。
接著將頁籤切換到 Mappers , 你會看見一堆與 User Attribute 有關的設定。
拿 gender 來說,就是將使用者的性別屬性(User Attribute -- gender),映射到Token的上做爲gender
的claim。此外,還可以設定應該出現在哪裏,像是ID權杖、存取權杖或是使用者資訊。關於前兩者之後還會透過分析Token格式說明,屆時也會再次看到gender claim。而userinfo
,在「Device Code(2)」的小範例中其實有用到,再實戰篇解析同樣會看到,但要取得並不困難,在取得存取權杖後,使用http://localhost:8080/auth/realms/quick-start/protocol/openid-connect/userinfo
這個endpoint,便會取得與使用者相關的訊息:
{
"sub": "345b1bca-9805-4b4b-a0f8-da2c70176c59",
"website": "https://bob.id",
"email_verified": true,
"birthdate": "2021/10/03",
"group_roles": [
"x_default-roles-quick-start",
"x_offline_access",
"x_uma_authorization",
"x_Group Role A",
"x_quick-start-example-role1"
],
"gender": "man",
"preferred_username": "bob",
"middle_name": "J",
"given_name": "Bob",
"picture": "https://cdn.pixabay.com/photo/2013/07/13/10/07/man-156584_960_720.png",
"x": [
"/Group A"
],
"nickname": "小明",
"name": "Bob Lee",
"group_attr": "A",
"family_name": "Lee",
"email": "bob@fake.email"
}
不過依我的觀察,在「快速開始」並沒有與這個endpoint互動。profile
的資訊是oidc-client
透過id_token
解析再做整理而來的。
其他屬性同樣會因爲 profile
scope,而添加到token
裡,譬如:birthdate
且除了 User Attribute 外, User Property 同樣可能被處理到Token裏面。像是使用者的名字firstName
在Token上呈現的cliam就是given_name
。